package main

import (
	"encoding/json"
	"jlpay-sdk-go/pkg/jlpay/demo"
	ledger2 "jlpay-sdk-go/pkg/jlpay/services/ledger"
	"jlpay-sdk-go/pkg/jlpay/utils"
)

// 通知消息解析示例
func notifyDemo(notifyService *ledger2.NotifyService) {
	// 模拟接收到的通知数据
	notifyData := map[string]interface{}{
		"org_code":      "50720711",
		"mch_id":        "849584358120018",
		"ledger_module": "01",
		"status":        "SUCCESS",
		"reason":        "处理成功",
		"timestamp":     "2024-01-01 12:00:00",
		"sign":          "abc123def456",
		"nonce":         "nonce123",
	}

	utils.Info("接收到通知数据:")
	notifyJSON, _ := json.MarshalIndent(notifyData, "", "  ")
	utils.Infof("通知数据: %s", string(notifyJSON))

	// 解析通知消息
	notifyDto := notifyService.ParseNotify(notifyData)

	utils.Info("解析结果:")
	utils.Infof("机构代码: %s", notifyDto.OrgCode)
	utils.Infof("商户号: %s", notifyDto.MchID)
	utils.Infof("账本模块: %s", notifyDto.LedgerModule)
	utils.Infof("状态: %s", notifyDto.Status)
	utils.Infof("原因: %s", notifyDto.Reason)
	utils.Infof("时间戳: %s", notifyDto.Timestamp)
	utils.Infof("签名: %s", notifyDto.Sign)
	utils.Infof("随机数: %s", notifyDto.Nonce)

	// 判断通知状态
	if notifyDto.IsSuccess() {
		utils.Info("通知状态: 成功")
	} else if notifyDto.IsFailed() {
		utils.Info("通知状态: 失败")
	} else {
		utils.Info("通知状态: 未知")
	}

	utils.Infof("状态描述: %s", notifyDto.GetStatusDescription())
	utils.Infof("字符串表示: %s", notifyDto.String())
}

func main() {
	// 设置日志级别为info，显示详细的调试信息
	utils.SetLogLevel("info")

	// 创建配置对象和通知服务
	config := demo.CreateDemoConfig()
	notifyService := ledger2.NewNotifyService(config)

	notifyDemo(notifyService)

}
